[C++]模板类的友元重载
来源:百度知道 编辑:UC知道 时间:2024/05/22 08:19:24
下面的代码在Visual C++6.0中编译报错
#include <iostream>
using namespace std;
template <class T>
class Test;
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj);
template <class T>
class Test
{
private:
int num;
public:
Test(int n=0){num=n;}
Test(const Test <T> & copy){num=copy.num;}
friend ostream& operator < <(ostream& out,const Test <T> & obj);
};
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj)
{
out < <obj.num;
return out;
}
int main()
{
Test <int> t(2);
cout < <t < <endl;
return 0;
}
:\C++work\caogao\关于友元函数\sadfasd.cpp(22) : error
C2248: 'num' : c
#include <iostream>
using namespace std;
template <class T>
class Test;
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj);
template <class T>
class Test
{
private:
int num;
public:
Test(int n=0){num=n;}
Test(const Test <T> & copy){num=copy.num;}
friend ostream& operator < <(ostream& out,const Test <T> & obj);
};
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj)
{
out < <obj.num;
return out;
}
int main()
{
Test <int> t(2);
cout < <t < <endl;
return 0;
}
:\C++work\caogao\关于友元函数\sadfasd.cpp(22) : error
C2248: 'num' : c
楼主写的基本都是正确的,就是写friend的时候少写了点,更正如程序中!
我用的是VS7.1,VS6.0没有试过!
#include <iostream>
using namespace std;
template <class T>
class Test;
template <class T>
ostream& operator<<(ostream& out,const Test<T> &obj);
template <class T>
class Test
{
private:
int num;
public:
Test(int n=0){num=n;}
Test(const Test <T> & copy){num=copy.num;}
friend ostream& operator<< <>(ostream& out,const Test<T> &obj); //注意 在<< 后加上 <>表明这是个函数模板
};
template <class T>
ostream& operator<<(ostream& out,const Test<T> &obj)
{
out<<obj.num;
return out;
}
int main()
{
Test<int> t(2);
cout<<t;
return 0;
}
#include <iostream>
using namespace std;